const utils = require('./utils');

/**
 * 上传单文件
 * @param { String } url 上传的服务器地址
 * @param { String } httoken token标识
 * @param {*} tempFilePath 数据流
 * @param {String} bucket 桶名
 */
export function uploadFile(url, httoken, bucket, object, tempFilePath) {
	return new Promise(resolve => {
		let filePath = object ? `/${object}/${utils.getFileName(tempFilePath).fileName}` : `/${utils.getFileName(tempFilePath).fileName}`;
		console.log(filePath);
		wx.uploadFile({
			url: url,
			header: {
				Httoken: httoken
			},
			name: 'file', // 后端接收文本流的key
			filePath: tempFilePath, // 文件地址
			// 额外属性
			formData: {
				object: filePath, // 文件存储路径
				bucket: bucket // 桶名
			},
			success(res) {
				resolve(res)
			},
			fail: (error) => {
				console.error('失败：', error);
				wx.showToast({
					title: '失败,请检查网络配置',
					icon: 'error'
				})
			}
		})
	})
}

/**
 * 上传批量文件
 * @param { String } url 上传地址
 * @param { Stirng } httoken token值
 * @param { Stirng } bucket 桶名
 * @param { Stirng } object 存储路径
 * @param { Stirng|Array } tempFilePath 路径名称
 */
export function uploadBatchFile({url, httoken, bucket, object, tempFilePath}){
	return new Promise(resolve=>{
		let uploadReturnList = [];
		const promises = [];
		console.log(tempFilePath);
		tempFilePath.forEach((item,index) => {
			wx.showLoading({
				title: `文件上传中 ${index}/${tempFilePath.length}`,
			})
			const promise = uploadFile(url, httoken,bucket, object, item).then(result=>{
				if (result.statusCode == 200) {
					uploadReturnList.push(true)
				} else {
					uploadReturnList.push(false)
				}
			}).catch(err=>{
				console.log('err',err);
			})
			promises.push(promise);
		})

		// 使用 Promise.all 来等待所有异步操作完成
		Promise.all(promises).then(() => {
			wx.hideLoading();
			// 所有异步操作完成后执行其他函数
			if (uploadReturnList.includes(false)) {
				wx.showToast({
					title: '文件上传失败',
					icon: 'error'
				})
			}else{
				wx.showToast({
					title: '文件上传成功',
					icon: 'success'
				})
			}
			resolve(uploadReturnList)
		});
	})
}

/**
 * 获取客户端会话选择文件
 * @param { number } count 可以选择的数量
 * @param { Stirng } type 选择的类型
 * @param { String } url 上传地址
 * @param { Stirng } httoken token值
 * @param { Stirng } bucket 桶名
 * @param { Stirng } object 存储路径
 * @param { Stirng|Array } tempFilePath 路径名称
 */
export function uploadChatFile({count, type, url, httoken, bucket, object}) {
	return new Promise(resolve=>{
		wx.chooseMessageFile({
			count: count * 1 || 1,
			type: type || 'all', // all	所有文件; video 只选择视频; image 只选择图片; file 可以选择其它的文件
			success(res) {
				console.log(res.tempFiles);
				let tempFilePath = res.tempFiles;
				// 上传文件
				let uploadReturnList = [];
				const promises = [];
				console.log(tempFilePath);
				tempFilePath.forEach((item,index) => {
					wx.showLoading({
						title: `文件上传中 ${index}/${tempFilePath.length}`,
					})
					const promise = uploadFile(url, httoken,bucket, object, item.path).then(result=>{
						if (result.statusCode == 200) {
							uploadReturnList.push(true)
						} else {
							uploadReturnList.push(false)
						}
					}).catch(err=>{
						console.log('err',err);
					})
					promises.push(promise);
				})
		
				// 使用 Promise.all 来等待所有异步操作完成
				Promise.all(promises).then(() => {
					wx.hideLoading();
					// 所有异步操作完成后执行其他函数
					if (uploadReturnList.includes(false)) {
						wx.showToast({
							title: '文件上传失败',
							icon: 'error'
						})
					}else{
						wx.showToast({
							title: '文件上传成功',
							icon: 'success'
						})
					}
					resolve(uploadReturnList)
				});
			},fail(err){
				console.log('err',err);
				resolve(err)
			}
		})
	})
}